package utils.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class ClassUtils {
	
	private ClassUtils() {
	}
	
	/**
	 * 一个对象是否存实现某个接口
	 * @param interfaces　接口
	 * @param interfaceName　接口匹配名称
	 * @return
	 */
	public static boolean hasInterface(Class[] interfaces , String interfaceName){
		if (interfaces == null || interfaces.length == 0) {
			return false;
		}
		for (Class itfc : interfaces) {
			String itfcName = itfc.getName();
			if (interfaceName.equals(itfcName)) {
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 取出实体声明域中的泛型
	 * @param field 类成员域
	 * @return 返回泛型里的类型
	 */
	public static Type[] getGenericType(Field field) {
		if (field == null) {
			throw new NullPointerException("域不能为空！");
		}
		return ((ParameterizedType)field.getGenericType()).getActualTypeArguments();
	}
	
	/**
	 * 是否是Java本身的类
	 * @param clz
	 * @return
	 */
	public static boolean isJDKClass(Class<?> clz) {  
	    return clz != null && clz.getClassLoader() == null;  
	}
}
